/*
 * FileDateModification
 *
 *
 * Esta entidad representa a la ultima fecha de modificacion de un archivo. Encapsula la
 * funcionalidad de la funcion stat() y almacena los datos en una estructura struct tm
 * */

#ifndef FILEDATEMODIFICATION_H_
#define FILEDATEMODIFICATION_H_

// Para obtener fecha de modificacion de archivos
#include <sys/stat.h>
#include <unistd.h>
#include <time.h>

#include <string>
#include <fstream>
#include <iostream>
#include <sstream>
#include <cstdlib>
#include <cstring>

class FileDateModification {
	struct tm* clock;
	std::string date;

	bool fromFile;

	void createFromFile(const char* filename);
	void createStringDate();

	public:
		FileDateModification();
		FileDateModification(const char* filename);
		FileDateModification(const FileDateModification& fileDateMod);

		virtual ~FileDateModification();

		// Otra forma de crear el objeto luego de instanciarlo
		void createFileModDate(const char* filename);

		// Devuelve la fecha en formato string
		std::string getFileDateMod();

		/* Compara dos fechas. Devuelve -1 si la instancia a la que se le pasa el mensaje
		 * es menor, 0 si son iguales, 1 en caso contrario
		 * */
		int compare(const FileDateModification& fMod);

		friend std::ostream& operator<<(std::ostream &o,const FileDateModification &fDate);
		friend std::istream& operator>>(std::istream &i, FileDateModification &fDate);
		void operator=(const FileDateModification& fDate);
};

#endif
